iT邦幫忙

0

30天Leetcode挑戰(11):501 Fine mode in binary tree

  • 分享至 

  • xImage
  •  

碎碎念

好像斷更了,但沒關係,跟我一起挑戰的朋友有持續下去的樣子。
今天也是一個跟閱讀測驗鬥智鬥勇的題目,而且最後搞出來的程式碼大概40行
你真的是easy題目嗎......

題幹

返回二元樹中最常出現的數字,二元樹的規則是左邊小於等於,右邊大於等於。

解題思路

看起來是不難,但問題是我對於這個資料結構很陌生......所以基本上都是叫AI來搞定。
現在我知道我那個朋友昨天說的:「管科的跑來修完資結之後都會很頹喪」的那種感覺,雖然我不是管科就是了。
原本我是叫AI直接扁平化然後數數字,但後來想想其實也不用,直接歷遍應該也是沒問題。而且他還找了一個酷酷的歷遍方式。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []

        # 初始化相关变量
        self.prev_val = None
        self.current_count = 0
        self.max_count = 0
        self.modes = []

        # 中序遍历函数
        def inorder(node):
            if not node:
                return
            inorder(node.left)
            # 更新当前数字出现次数
            if self.prev_val == node.val:
                self.current_count += 1
            else:
                self.current_count = 1
                self.prev_val = node.val
            # 检查是否需要更新模式列表
            if self.current_count == self.max_count:
                self.modes.append(node.val)
            elif self.current_count > self.max_count:
                self.max_count = self.current_count
                self.modes = [node.val]
            inorder(node.right)

        # 执行中序遍历
        inorder(root)
        return self.modes
        

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言